构建


版本0.17开始 , 切换为新构建配置系统GN和Chromium的Ninja . NW中的Node.js仍然使用GYP/Ninja构建 . 该文档适用版本0.13及更新版本 . 遗留版本构造说明 , 可以参考GitHub的[wiki](https://github.com/nwjs/nw.js/wiki/Building-nw.js) . 参考官网下载页面构建配置以及构建步骤: http://buildbot-master.nwjs.io:8010/waterfall

前提条件

NW.js在Chromium中使用同样的构造工具和步骤 . 根据构造使用的系统参考指导说明安装depot_tools工具以及其他前提条件 .

  • Windows
  • Mac OS X
  • Linux

    Windows系统中 , Chromium文档建议 , 运行set DEPOT_TOOLS_WIN_TOOLCHAIN=0或者设置全局变量 .

    Xcode 7 , 不支持Xcode 7中的SDK 10.11 . 如果升级到Xcode 7 , 可以降低版本到Xcode 6或者拷贝其他设备的Mac SDK 10.10 , `xcode-select -p`/Platforms/MacOSX.platform/Developer/SDKs .

获取代码

步骤 1. 创建目录存放NW.js源码 , 例如: $HOME/nwjs , 在创建的目录中运行以下命令生成.gclient文件:

mkdir -p $HOME/nwjs
cd $HOME/nwjs
gclient config --name=src https://github.com/nwjs/chromium.src.git@origin/nw17

通常不会使用Chromium进行测试 , Chromium测试需要同步测试用例以及参考构建 , 该过程需要花费大量时间 . 打开.gclient文件 , 创建以及替换以下内容到custom_deps:

"custom_deps" : {
    "src/third_party/WebKit/LayoutTests": None,
    "src/chrome_frame/tools/test/reference_build/chrome": None,
    "src/chrome_frame/tools/test/reference_build/chrome_win": None,
    "src/chrome/tools/test/reference_build/chrome": None,
    "src/chrome/tools/test/reference_build/chrome_linux": None,
    "src/chrome/tools/test/reference_build/chrome_mac": None,
    "src/chrome/tools/test/reference_build/chrome_win": None,
}

手动复制以及检查以下资源分支:

path repo
src/content/nw https://github.com/nwjs/nw.js
src/third_party/node https://github.com/nwjs/node
src/v8 https://github.com/nwjs/v8

步骤 2. 终端中运行以下命令:

gclient sync --with_branch_heads

由GitHub和Google的Git提供的资源需要下载 , 大小通常为20G以及更多 , 所以需要一个较好的网络以及耐心完成该过程 .

完成之后 , src目录中能够找到.gclient文件 .

Linux系统中首次构造
如果在Linux系统中完成首次构造 , 需要运行`gclient sync --with_branch_heads --nohooks` , Ubuntu系统中需要运行`./build/install-build-deps.sh` , 安装需要依赖包 . 参考[Chromium文档](http://dev.chromium.org/developers/how-tos/get-the-code) , 查看源代码中详细的结构信息 .

Chromium中使用GN生成ninja构建文件

cd src
gn gen out/nw  (不支持修改'nw'路径 . 如果新建最好不要修改'out'路径)

官方构建参数:

is_debug=false
is_component_ffmpeg=true
target_cpu="x64"

通过设置is_component_build = true进行支持组件构建 , 以便能够加快开发周期 .

参考GN和GYP参数映射关系相关文档https://chromium.googlesource.com/chromium/src/+/master/tools/gn/docs/cookbook.md#Variable-mappings

Node中使用GYP生成ninja构建文件

cd src
GYP_CHROMIUM_NO_ACTION=0 ./build/gyp_chromium third_party/node/node.gyp

或者使用以下命令完成组件构建:

./build/gyp_chromium -D component=shared_library third_party/node/node.gyp

改变Node构建配置 , 需要设置GYP_DEFINES环境变量

构建32/64位

  • Windows
    • 32-bit: 默认构建
    • 64-bit: set GYP_DEFINES="target_arch=x64"以及在out/Debug_x64out/Release_x64目录中重新构建
  • Linux
    • 32-bit: TODO: chroot
    • 64-bit: 默认构建
  • Mac
    • 32-bit: export GYP_DEFINES="host_arch=ia32 target_arch=ia32"以及在out/Debugout/Release目录中重新构建
    • 64-bit: 默认构建

构建nwjs

运行GN之后 , ninja在out/nw目录中生成构建文件 . 终端中运行以下命令 , 在out/nw目录中生成标准NW.js二进制代码:

cd src
ninja -C out/nw nwjs
构建过程
通常一个完成的构建过程需要的时间依赖于使用的系统以及设备 . 构建使用的设备推荐配置 , 多于8核的CPU , SSD以及大于8G的内存 . 参考[快速构建](#build-faster)相关配置 .

构建32/64位或者非标准构建方式 , 可以通过编辑out/nw/args.gn文件以及重新按照以上命令运行生成二进制代码 .

构建Node

cd src
ninja -C out/Release node

构建Node之后 , 最后需要拷贝Node构造的二进制文件到nwjs目录中:

cd src
ninja -C out/nw copy_node

构造方式

  • Standard: 'nwjs_sdk=false'
  • SDK: enable_nacl=true

参考构造方式 , 说明不同构造方式之间的区别 .

专有编解码器

由于权限问题 , NW.js预制构建的二进制代码不支持专有编解码器 , 例如H.264 . 所以不能在预制构建的NW.js中使用<audio><video>标签播放MP3/MP4 . 如果使用 , NW.js需要通过源代码重新进行编译 , 参考文档专有编解码器 .

快速构建

Google网站中 , 提供一些快速构建的方法 . 打开一下链接查看针对各个系统中提供的方法: